import router from "./router";
import store from "./store";
import { getCache } from '@/utils/session';
import { Message } from "element-ui";

// 全局前置守卫 beforeEach
// 允许每次路由切换前执行一些操作或进行一些验证
/**
 * to: 即将进入的目标路由对象
 * from: 当前导航正要离开的路由
 * next: 一定要调用该方法来 resolve 这个钩子。用于确认导航过程是否继续
 */
// async
router.beforeEach(async (to, from, next)=> {



  // 检查是否已登录：通过 const isLogin = getCache('TOKEN'); 获取缓存中的Token来判断用户是否已经登录。
  const isLogin = getCache('TOKEN');
  // 
  console.log('isLogin---1',isLogin);

  if(isLogin) {
    
    // 已登录
    if(to.path === '/login') {
      console.log('11111111111');
      next();
    } else {
      console.log('22222222');
      // 已登录
      const route = store.state.permission.routes;
      console.log('route',route);
      // 存在至少一条静态路由（或已根据权限动态生成的路由）
      if(route.length > 0 ) {
        console.log('3333333333')
        next();
        // NProgress.done();
      }else {
        console.log('4444444444');
        // 无动态路由
        // 获取用户权限路由
        const userInfo = store.state.user.accountInfo;
        console.log('userInfo', userInfo);
        try {
          const { roleIds } = userInfo;
          const accountRoute = await store.dispatch('permission/getRouteAction', roleIds);
          console.log('accountRoute---', accountRoute);
          accountRoute.forEach(item=> {
            router.addRoute(item);
          })
          // next()
          // next({ ...to, replace: true });
          if (from.path == '/login') {
            // next(accountRoute[0].children[0].path);
            next('/index')
          } else {
            next({ ...to, replace: true });
          }
        } catch (error) {
          Message.error('获取动态路由失败');
          next('/login');
          // NProgress.done();
        }
      }


      // next()
    }
  }else {
    console.log('我没token');
    // 未登录
    if(to.path === '/login') {
      next();
    }else {
      next('/login');
    }
  }









  // 如果用户已登录，则允许进入登录页面
  if(to.path === '/login') {
    next();
  }else {
    // 未登录重定向至登录页
    if(!isLogin) {
      // Message.error({
      //   message: '请先登录1111111111111',
      //   type: "error",
      // });
      next('/login');
    }else {
      // 6、已登录且存在静态路由直接放行：
      // 如果已登录且 store 中已经存在用户权限路由，则直接 next() 并关闭进度条。
      const route = store.state.permission.routes;
      console.log('route---',route);
      if(route.length > 0) {
        next();
        // NProgress.done();
      }else {
        // 7、已登录且不存在静态路由：
        // 根据用户信息中的rolesId，异步请求动态路由权限信息。
        // 
        const userInfo = store.state.user.accountInfo;
        try{
          // 8、处理动态路由数据
          // 通过 store.dispatch('permission/getRouteAction', roleIds) 发起异步操作获取权限路由，
          // 然后将返回的路由逐一通过 router.addRoute(res); 添加到Vue Router中
          const { roleIds } = userInfo;
          const accountRoute = await store.dispatch('permission/getRouteAction', roleIds);

          accountRoute.forEach(item=> {
            router.addRoute(item);
          })
          // 9、登录后首次访问逻辑：如果来自登录页，手动导航到第一个子路由页面；否则，使用 next({ ...to, replace: true }) 保持当前URL不变但刷新页面内容，确保路由更新有效。
          if (from.path == '/login') {
            next(accountRoute[0].children[0].path);
          } else {
            next({ ...to, replace: true });
          }
        }catch(error){
          Message.error('获取动态路由失败');
          next('/login');
          // NProgress.done();
        }
      }

    }
  }




})
router.afterEach(() => {
  console.log("afterEach");
})
